// 情景1:有三个异步任务S1,S2,S3，他们都完成后执行一个 a1
// s1---|
// s2---|----a1
// s3---|

// 通常做法是
// s1,s2,s3完成后发出一个事件,当三个事件都被某个管理者收到后 执行a1

// http://justinklemm.com/node-js-async-tutorial/
// async 适用场景1:对一个array 遍历异步操作全部完成后，执行某项操作
var request = require("request");
var async = require('async');

var result = [];
var srcData =
	['http://www.baidu.com',
		'http://www.hao123.com',
		'http://www.bing.com'
	];

function httpGet(url, next) {
	return function() {
		request({
			url: url
		}, function(err, response, body) {
			next(err, response, body);
		})
	}
}

async.each(srcData, function(url, callback) {
	console.log('start:'+url);
	httpGet(url, function(err, response, body) {
		if (err) {
			console.log(err);
			callback(err);
			return;
		}

		console.log('done:url=' + url);
		result.push({
			url: url,
			size:body.length,
			body: body.substr(0, 10)
		});
		callback();
	})();
}, function(err) {
	console.log('all done');
	result.forEach(function(item) {
		console.log('\n', item);
	})
});
